package com.design.document.handler;


//import com.design.document.configuration.RabbitConfig;
import com.design.document.entity.User;
import com.rabbitmq.client.Channel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

import java.io.IOException;


/*
 * @Author complone
 * @Description 消费者端,根据绑定的routeKey，推送到对应的队列
 * @Date  2018/12/20
 **/
//@Component
public class UserHandler {
//    private static final Logger log = LoggerFactory.getLogger(UserHandler.class);
//
//
//    /*
//     * @Author complone
//     * @Description 消费者自动ACK机制
//     * @Date  2018/12/20
//     * @Param 压入队列的对象
//     * @Param 消息的传递状态
//     * @Param 对应的队列对象
//     **/
//    @RabbitListener(queues = {RabbitConfig.DEFAULT_QUEUE})
//    public void listenerAutoAck(User user, Message message, Channel channel){
//        //如果手动ACK，消息会被监听消费，但是消息在队列中依旧存在如果未配置ackowledge-mode 默认是会在消费完毕后自动ACK掉
//        final long deilveryTag = message.getMessageProperties().getDeliveryTag();
//
//        try {
//            log.info("[listenerAutoACK 监听的消息] - [{}]",user.getUsername());
//            //通知MQ消息已经成功消费，可以ACK了
//            channel.basicAck(deilveryTag,false);
//        }catch (IOException e){
//            try{
//                //处理失败,重新压入MQ
//                channel.basicRecover();
//            }catch (IOException e1){
//                e1.printStackTrace();
//            }
//        }
//    }
//
//
//
//    /*
//     * @Author complone
//     * @Description 消费者手动ACk机制
//     * @Date  2018/12/20
//     * @Param 压入队列的对象
//     * @Param 消息的传递状态
//     * @Param 对应的队列对象
//     **/
//    @RabbitListener(queues = {RabbitConfig.MANUAL_QUEUE})
//    public void listenerManualAck(User user,Message message,Channel channel){
//        log.info("[listenerManualAck 监听的消息] - [{}]",user.getUsername());
//        try{
//            channel.basicAck(message.getMessageProperties().getDeliveryTag(),false);
//        }catch (IOException e1){
//            //如果报错了，那么可以进行容错处理，转移当前消息到队列
//        }
//    }
}
